package com.mall.service;

import com.mall.common.util.JsonResult;
import com.mall.model.CloneRequest;
import com.mall.model.Product;
import com.mall.model.ProductBack;
import com.mall.model.ProductBundleRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/*
* 商品业务接口*/
public interface ProductService {
    /*创建商品*/
    Long create(Product product);

    /*按照Id更新*/
    boolean updateById(Product product);

    /*详情 （过滤逻辑删除的记录）*/
    Product getById(Long id);

    /*分页查询*/
    List<Product> pageQuery(String keyword,
                            Long brandId,
                            Long categoryId,
                            Integer status,
                            Integer isHot,
                            int page,
                            int size);

    /*统计查询条件下的总数*/
    long count(String keyword,
               Long brandId,
               Long categoryId,
               Integer status,
               Integer isHot);

    /*逻辑删除*/

    boolean softDeleted(Long id);

    /*更新状态*/
    boolean updateStatus(Long id,Integer status);

    /*更新是否热门标记*/
    boolean updateisHot(Long id,Integer isHot);

    /*更新库存*/
    boolean updateStock(Long id,Integer stock);

    /*订单扣除库存*/
    boolean jianshaoStock(Long id,Integer jianshaoStock);

    /*订单扣除库存事务失败回滚*/
    boolean restorejianshaoStock(Long id,Integer jianshaoStock);

    /*更新价格*/
    boolean updatePrice(Long id, BigDecimal price);

    /*按照品牌Id查询*/
    List<Product> getByBrandId(Long brandId,Integer status);

    /*按照分类ID查询*/
    List<Product> getByCategoryId(Long categoryId,Integer status);

    /**
     * 获取商品关键指标
     */
    ProductBack getKeyMetrics(LocalDate startDate, LocalDate endDate);

    /*
    获取分类商品统计
    * */
    List<Map<String, Object>> getProductcount(LocalDate startDate, LocalDate endDate);

     /*
     获取库存统计
     * */
    List<Map<String, Object>> getStockBack(LocalDate startDate, LocalDate endDate);

    // ========== 批量操作相关方法 ==========

    /**
     * 批量更新商品状态
     */
    JsonResult<String> batchUpdateStatus(List<Long> productIds, Integer status);

    /**
     * 批量更新商品热门状态
     */
    JsonResult<String> batchUpdateHot(List<Long> productIds, Integer isHot);

    /**
     * 批量删除商品
     */
    JsonResult<String> batchDelete(List<Long> productIds);

    /**
     * 批量库存操作
     */
    JsonResult<String> batchUpdateStock(List<Long> productIds, String operationType, Integer amount);

    // ========== 导入导出相关方法 ==========

    /**
     * 导出商品
     */
    void exportProducts(HttpServletResponse response, String keyword, Long brandId, Long categoryId, Integer status, Integer isHot);

    /**
     * 导入商品
     */
    JsonResult<String> importProducts(MultipartFile file);

    /**
     * 下载导入模板
     */
    void downloadTemplate(HttpServletResponse response);

    // ========== 商品克隆相关方法 ==========

    /**
     * 克隆商品
     */
    JsonResult<String> cloneProduct(Long productId, CloneRequest request);

    // ========== 商品组合相关方法 ==========

    /**
     * 创建商品组合
     */
    JsonResult<String> createBundle(ProductBundleRequest request);





}
